#include "apiallocine.h"
#include "xml.h"
#include "choixfilmparliste.h"
#include "httpimage.h"
#include "editionfilm.h"
#include "application.h"

apiAllocine::apiAllocine(film* f,QObject * parent)
{
    this->setParent(parent);
    mFilm = f;
    titreDerniereRecherche = "";
}

void apiAllocine::ListeFilmParTitre()
{
     QNetworkRequest requete;
//     QRegExp regDate("(\\d{4})");
//     QRegExp regLangue("((VOST|VF)+)");
//     QString titre = titreFilm.remove(regDate);
//     titre.remove(regLangue);

     titreDerniereRecherche = mFilm->titre();

     requete.setUrl(QUrl("http://api.allocine.fr/rest/v3/search?partner=YW5kcm9pZC12M3M&filter=movie&count=10&page=1&q="
                          +titreDerniereRecherche+"&format=xml"));

     connect(this, SIGNAL(finished(QNetworkReply*)), this, SLOT(ResultatListeFilmParTitre(QNetworkReply*)));
     this->get(requete);
}

void apiAllocine::ResultatListeFilmParTitre(QNetworkReply *resultat)
{
    this->disconnect(this,SIGNAL(finished(QNetworkReply*)),this, SLOT(ResultatListeFilmParTitre(QNetworkReply*)));
    if(resultat->error())
    {
        // Affichage de l'erreur
        QErrorMessage messageErreur;
        messageErreur.showMessage(resultat->errorString());
        messageErreur.exec();
    }
    else
    {
        QByteArray donnees = resultat->readAll();
        xml lecteurXml;
        QList<QStringList> listeFilmsResultat= lecteurXml.LireRechercheFilm(donnees);
        //on affiche le popup demandant de choisir le film souhaité.
        choixFilmParListe* chx = new choixFilmParListe(titreDerniereRecherche,listeFilmsResultat);
        /*int retour = app()->empilerDialogue(chx);*/
        int retour = chx->executer();
        if(retour == 0)
        {
            delete chx;
            return;
        }
        else if(retour == -1)//demande de refresh
        {
            mFilm->setTitre(chx->ValEdtRecherche());
            ListeFilmParTitre();
            delete chx;
            return;
        }
        else if(retour >0)
        {
            delete chx;
            mFilm->setCodeAllocine(retour);
            emit FilmChoisi();
        }
    }

    // On supprime les ressources utilisées par QNetworkReply
    connect(resultat, SIGNAL(finished()), resultat, SLOT(deleteLater()));
}

void apiAllocine::InfoFilmParCode()
{
    QNetworkRequest requete;
    requete.setUrl("http://api.allocine.fr/rest/v3/movie?partner=YW5kcm9pZC12M3M&code="
                   + QString::number(mFilm->codeAllocine()) + "&profile=medium&mediafmt=mp4-lc&format=xml&filter=movie");
    connect(this, SIGNAL(finished(QNetworkReply*)), this, SLOT(ResultatInfoFilmParCode(QNetworkReply*)));
    this->get(requete);
}

void apiAllocine::ResultatInfoFilmParCode(QNetworkReply* resultat)
{
    this->disconnect(this,SIGNAL(finished(QNetworkReply*)),this, SLOT(ResultatInfoFilmParCode(QNetworkReply*)));
    if(resultat->error())
    {
        // Affichage de l'erreur
        QErrorMessage messageErreur;
        messageErreur.showMessage(resultat->errorString());
        messageErreur.exec();
    }
    else
    {
        QByteArray donnees = resultat->readAll();
        xml lecteurXml;
        lecteurXml.LireInfoFilm(mFilm,donnees);

        emit FilmParsee();
    }

    // On supprime les ressources utilisées par QNetworkReply
    connect(resultat, SIGNAL(finished()), resultat, SLOT(deleteLater()));
}

void apiAllocine::InfoVideoParCode()
{
}

void apiAllocine::RecherchePersonne(QString nomPersonne)
{

}

void apiAllocine::InfoPersonneParCode()
{
    QNetworkRequest requete;
    requete.setUrl("http://api.allocine.fr/rest/v3/person?partner=YW5kcm9pZC12M3M&profile=medium&code="
                   + QString::number(mPersonne->codeAllocine()) + "&mediafmt=mp4-lc&filter=person&format=xml");
    connect(this, SIGNAL(finished(QNetworkReply*)), this, SLOT(ResultatInfoPersonneParCode(QNetworkReply*)));
    this->get(requete);
}

void apiAllocine::ResultatInfoPersonneParCode(QNetworkReply* resultat)
{
    this->disconnect(this,SIGNAL(finished(QNetworkReply*)),this, SLOT(ResultatInfoPersonneParCode(QNetworkReply*)));
    if(resultat->error())
    {
        // Affichage de l'erreur
        QErrorMessage messageErreur;
        messageErreur.showMessage(resultat->errorString());
        messageErreur.exec();
    }
    else
    {
        QByteArray donnees = resultat->readAll();
        xml lecteurXml;
        lecteurXml.LireInfoPersonne(mPersonne,donnees);
        emit PersonneParsee(*mPersonne);
    }

    // On supprime les ressources utilisées par QNetworkReply
    connect(resultat, SIGNAL(finished()), resultat, SLOT(deleteLater()));
}

void apiAllocine::Filmographie(int codePersonne)
{

}


